/*
 * Hlavni.c
 *
 *  Created on: 6.11.2012
 *      Author: Z183797
 */
#include <stdio.h>
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//Lokalni header
#include "Hlavni.h"
#include "UART.h"
#include "data.h"

char prijaty_znak;
ISR(USART_RXC_vect) {
        if (flag == 1) {
                nactiData(UDR);
        } else if ((flag == 0) && (validData(UDR))) {
                flag = 1;
                write_Character((char)flag);
                //cli();          // Vypnout globalne interrupty / otazka zda stale zapinat vzpinat??
        }

}

int main(void) {
        stav = INIT;            // Po startu programu musi jako prvni probehnout INIT

        while (1) {
                switch (stav) {
                        case INIT:
                                inicialiazace();
                                write_UART("INIT");
                                break;
                        case PROBLEM:
                        flag=3;
                        // Prip. selhani initu atd.
                                break;
                        case ALARM:
                        //Generace alarmu;
                                break;
                        case NOVA_DATA:
#ifndef FUNKCE
                                ulozeniDat(ptr_reference);
#define FUNKCE
#else
                                ulozeniDat(ptr_aktualni);
#endif
                                break;
                        case DATA:
                                kontrolaDat();
                                ptr_aktualni->platnost=DATA_NEPLATNA;
                                break;
                        case NEPLATNA_DATA:
                                blikLED();
                                write_UART("Cekame na data");
                                break;
                        default:
                                break;
                }
        }

}
// Prvotni inicializace
// -> NEPLATNA_DATA
void inicialiazace()
{
        init_Ports();
        init_UART();
        sei();
        //<! Global interrupt
        ptr_reference = &pozice[0];      //<! Pointer na referncni polohu
        ptr_aktualni = &pozice[1];           //<! Pointer na aktualni polohu
        ptr_aktualni->platnost=DATA_NEPLATNA;
        ptr_reference->platnost=DATA_NEPLATNA;
        stav= NEPLATNA_DATA;
}

/////////////////////////////
//! Funkce: set_Ports      //
//! Inicializace portu     //
/////////////////////////////
void init_Ports() {
        DDRB |= (1 << PB0);           //<! Aktivovani pinu PB0
        PORTB = (1 << PB0);            //<! Nastaveni do vysoke urovne
}

/////////////////////////////
//! Funkce: blik_LED       //
//! Blikani LED diodou     //
/////////////////////////////
void blikLED() {
        PORTB = (0 << PB0);
        _delay_ms(1000);
        //PORTB = (1 << PB0);
        //_delay_ms(1000);
}
/////////////////////////////
//! Funkce: Interrupt       //
//! Blikani Interrupt UART  //
/////////////////////////////
